Computer systems use software applications to execute particular actions and responses. This almost always includes a formal specification for both the hardware and software. Such require testing to verify proper processing.
Traditionally, software testing follows a well-know sequence, the design of the software system is dictated by a specification of the system's, appearance, interaction, and results. Such specification is the basis for programming of the software that implements the system. The software is then tested against its specification, and any discrepancies between designed and actual operation are corrected and re-tested. Such cycle of test and change is repeated until the operation of the system is correct as specified. Software development necessitates that every change be tested, so the cycle of test-change-test is repeated until no further changes are required, that is, until the test verifies the specified.
In the competitive business environment, it is often the case the company first to market with the complete system, designed, programmed, tested, and delivered, has the competitive advantage. Thus, the efficient testing of a software system is vital to the commercial success of a software system.
Many computer systems give service beyond their original specification. Computer systems that are successful are modified over time to be responsive to changes in requirements, environment, application, preferences, or to correct errors found after initial test verification. In these cases, the system is changed and tested against the new specifications. Ideally, the software system is verified against the full specification, not just the changed parts.
In large systems, the time needed to re-test the entire system may be prohibitive, e.g., several months. An exhaustive re-test of the entire system for each change, while giving the greatest confidence of a correct system, may not be practical. An efficient test strategy is desirable, one that is comprehensive, accurate, and responsive to changes, and provides a competitive advantage.
What is needed is a system for identifying which classes of an object-oriented system require testing. For example, an automated method for creating test programs that test for changed or dependent classes in an optimal sequence.